import Semaforo.*;


public class Recurso extends Thread{
	int numLectores=0;
	
	SemaforoBinario s;
	SemaforoBinario escribir;
	
	public Recurso(int hayLectores,int hayEscritor){
		escribir=new SemaforoBinario(hayEscritor);
		s=new SemaforoBinario(hayLectores);
	}
	
	public void leer(int lector) {
		// protocolo de entrada 
		s.WAIT();
		numLectores++;
		if(numLectores==1){
			escribir.WAIT();
		}
		s.SIGNAL();
		
		//LEYENDO sin sincronizacion para permitir concurrencia
		System.out.println("Lector "+ lector + " leyendo; numlectores:"+ numLectores);
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
						
		//protocolo de salida
		s.WAIT();
		numLectores--;
		if(numLectores==0){
			escribir.SIGNAL();
		}
		s.SIGNAL();
	}
	
	synchronized public void escribir(int escritor){
		// protocolo de entrada
		escribir.WAIT();
		
		//ESCRIBIENDO sin sincronizar pero sólo habrá un escritor
		System.out.println("Escritor "+ escritor + " escribiendo");
//		try {
//			Thread.sleep(1000);
//		} catch (InterruptedException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		
		//protocolo de salida
		escribir.SIGNAL();

	}
}


